﻿
DROP TABLE IF EXISTS cadastro_usuario;
DROP FUNCTION IF EXISTS cadastrarUsuario(varchar(30),varchar(30),varchar(30),char(2),varchar(12));
DROP FUNCTION IF EXISTS editarUsuario(varchar(30),varchar(30),varchar(30),char(2),varchar(12));
DROP FUNCTION IF EXISTS logarUsuario(varchar(30),varchar(30),varchar(30),char(2),varchar(12));

-- cria tabela de cadastro de usuarios -- 
CREATE TABLE cadastro_usuario (
	id_usuario	serial NOT NULL,
	nome_usuario	varchar(30) NOT NULL,
	email		varchar(100) NOT NULL CONSTRAINT emailkey PRIMARY KEY,
	cidade		varchar(30) NOT NULL,
	estado		char(2) NOT NULL,
	senha		varchar(12) NOT NULL,
	tipo_acesso	boolean NOT NULL
);

-- funcao cadastrar usuario --
CREATE or REPLACE FUNCTION cadastrarUsuario(
	nomeUsuario		varchar(30),
	emailUsuario		varchar(100),
	cidadeUsuario		varchar(30),
	estadoUsuario		char(2),
	senhaUsuario		varchar(12)
	) RETURNS integer AS 
$$
DECLARE
	nomeUsuario	ALIAS for $1;
	emailUsuario	ALIAS for $2;
	cidadeUsuario	ALIAS for $3;
	estadoUsuario	ALIAS for $4;
	senhaUsuario	ALIAS for $5;
BEGIN
	IF (SELECT id_usuario FROM cadastro_usuario where email = emailUsuario) > 0 THEN
		RETURN 0;
	ELSE
		INSERT INTO cadastro_usuario(nome_usuario,email,cidade,estado,senha,tipo_acesso)
		VALUES (nomeUsuario,emailUsuario,cidadeUsuario,estadoUsuario,senhaUsuario,'false');

		RETURN 1;
	END IF;
END
$$
LANGUAGE plpgsql;

-- exemplo de utilizacao --
SELECT * FROM cadastrarUsuario(
	'nome',			-- nome_usuario	varchar(30),
	'email',		-- email		varchar(30),
	'cidade',		-- cidade		varchar(30),
	'es',			-- estado		char(2),
	'senha'			-- senha		varchar(12)
	);

-- funcao editar usuario --
CREATE or REPLACE FUNCTION editarUsuario(
	nomeUsuario		varchar(30),
	emailUsuario		varchar(100),
	cidadeUsuario		varchar(30),
	estadoUsuario		char(2),
	senhaUsuario		varchar(12)
	) RETURNS SETOF RECORD AS 
$$
DECLARE
	nomeUsuario	ALIAS for $1;
	emailUsuario	ALIAS for $2;
	cidadeUsuario	ALIAS for $3;
	estadoUsuario	ALIAS for $4;
	senhaUsuario	ALIAS for $5;
BEGIN
	UPDATE cadastro_usuario SET
		nome_usuario = nomeUsuario,
		cidade = cidadeUsuario,
		estado = estadoUsuario,
		senha = senhaUsuario
	WHERE email = emailUsuario;

	RETURN QUERY SELECT
		nome_usuario,
		email,
		cidade,
		estado,
		tipo_acesso
	FROM
		cadastro_usuario
	WHERE
		email = emailUsuario AND
		senha = senhaUsuario;
	RETURN ;

	RETURN;
END
$$
LANGUAGE plpgsql;

-- exemplo de utilização -- 
SELECT * FROM editarUsuario(
	'nome',				-- nome_usuario		varchar(30),
	'email2',			-- email		varchar(100),
	'cidAAAAAAade',			-- cidade		varchar(30),
	'es',				-- estado		char(2),
	'sasaaaa'			-- senha		varchar(12)
	) AS (
	nome_usuario	varchar(30),
	email		varchar(100),
	cidade		varchar(30),
	estado		char(2));

DROP FUNCTION IF EXISTS logarUsuario(varchar(100),varchar(12));

-- funcao logar usuario --
CREATE or REPLACE FUNCTION logarUsuario(
	emailUsuario		varchar(100),
	senhaUsuario		varchar(12)
	) RETURNS SETOF RECORD AS 
$$
DECLARE
	emailUsuario	ALIAS for $1;
	senhaUsuario	ALIAS for $2;
BEGIN
	RETURN QUERY SELECT
		nome_usuario,
		email,
		cidade,
		estado,
		tipo_acesso
	FROM
		cadastro_usuario
	WHERE
		email = emailUsuario AND
		senha = senhaUsuario;

	RETURN ;
END
$$
LANGUAGE plpgsql;

-- exemplo de utilização -- 
SELECT * FROM logarUsuario(
		'email',		-- email		varchar(30)
		'senha'			-- senha		varchar(12)
	) AS (
		nome_usuario	varchar(30),
		email		varchar(100),
		cidade		varchar(30),
		estado		char(2)
	);

INSERT INTO cadastro_usuario(nome_usuario,email,cidade,estado,senha,tipo_acesso)
VALUES ('Admin com privilegios','admin@admin.com','Sorocaba','SP','999999','true');


select * from cadastro_usuario
delete from cadastro_usuario where id_usuario = 1